﻿using System.Data.Entity;
using NandleNF.DataType.Endereco;
using NandleNF.DataType.Estoque;
using NandleNF.DataType.Fornecedor;
using NandleNF.DataType.Orcamento;
using NandleNF.DataType.Pagamento;
using NandleNF.DataType.Pessoa;
using NandleNF.DataType.Produto;
using NandleNF.DataType.Telefone;

namespace NandleNF.DataType
{
    public class TDBContext : DbContext
    {
        #region [ Construtores ]
        

        /// <summary>
        /// Inicia Banco de Dados
        /// </summary>
        internal void CriaBanco()
        {
            //Database.Delete();

            SaveChanges();
        }

        /// <summary>
        /// Contrutor com String de Conexao
        /// </summary>
        /// <param name="ConnectionString"></param>
        public TDBContext(string ConnectionString)
            : base(string.IsNullOrWhiteSpace(ConnectionString) ? "Nandle" : ConnectionString) 
        {
            CriaBanco();
        }

        /// <summary>
        /// Contrutor Padrao
        /// </summary>
        public TDBContext()
            : base("Nandle")
        {
            CriaBanco();
        }

        #endregion

        #region [ Endereco ]

        public DbSet<TCidade> Cidade { get; set; }
        public DbSet<TEndereco> Endereco { get; set; }
        public DbSet<TEstado> Estado { get; set; }
        public DbSet<TRegiao> Regioao { get; set; }
        public DbSet<TTipoEndereco> TipoEndereco { get; set; }

        #endregion

        #region [ Estoque ]

        public DbSet<TEstoque> Estoque { get; set; }

        #endregion

        #region [ Fornecedor ]

        public DbSet<TFornecedor> Fornecedor { get; set; }

        #endregion

        #region [ Orcamento ]

        public DbSet<TItemOrcamento> ItemOrcamento { get; set; }
        public DbSet<TOrcamento> Orcamento { get; set; }

        #endregion

        #region [ Pagamento ]

        //public DbSet<TPagamento> Pagamento { get; set; }
        //public DbSet<TPagamentoAvista> PagamentoAvista { get; set; }
        //public DbSet<TPagamentoPrazo> PagamentoPrazo { get; set; }

        #endregion

        #region [ Pessoa ]

        public DbSet<TPessoa> Pessoa { get; set; }
        public DbSet<TPessoaEndereco> PessoaEndereco { get; set; }
        public DbSet<TPessoaFisica> PessoaFisica { get; set; }
        public DbSet<TPessoaJuridica> PessoaJuridica { get; set; }
        public DbSet<TPessoaTelefone> PessoaTelefone { get; set; }

        #endregion

        #region [ Produto ]

        public DbSet<TPreco> Preco { get; set; }
        public DbSet<TProduto> Produto { get; set; }
        public DbSet<TUnidadeComercializacao> UnidadeComercializacao { get; set; }

        #endregion

        #region [ Telefone ]

        public DbSet<TTelefone> Telefone { get; set; }
        public DbSet<TTipoTelefone> TipoTelefone { get; set; }

        #endregion
    }
}
